
// 区间或端点集合
const sourceData = [
  ['20-30', '20-30'],
  ['3','7']
]
/**
 * 
 * @param { array[number] | number } value 要验证的区间或端点
 * @returns 没有交集返回true, 否则返回false
 */
function interJudge(value) {
  const rangeArr = [],
    singleArr = []
  let flag1 = false,
    flag2 = false
  // 获取区间集合,端点集合,并分别判断是否有交集
  for (const item of [...sourceData]) {
    if (item[0].indexOf('-') != -1) {
      let itemArr = item[0].split('-').map(Number)
      rangeArr.push(itemArr)
    } else {
      // console.log(Number(item[0]), Number([item[1]]))
      singleArr.push(Number(item[0]))
      singleArr.push(Number(item[1]))
    }
  }
  // console.log(rangeArr,singleArr);
  /**
   * 判断区间是否有交集
   * arr1: 输入区间
   * arr2: rangArr 中的区间
   */
  function isIntersect(arr1, arr2) {
    let start = [Math.min(...arr1), Math.min(...arr2)] //区间的两个最小值
    let end = [Math.max(...arr1), Math.max(...arr2)] //区间的两个最大值
    return Math.max(...start) <= Math.min(...end) //最大值里的最小值 是否 小于等于 最大值的最小值
  }
  if (Array.isArray(value)) {//输入的是区间
    let arr1 = value
    if (rangeArr.length > 0) {
      for (const arr2 of rangeArr) {
        if (isIntersect(arr1, arr2)) {
          // console.log('有交集，不合格')
          flag1 = false
          break;
        } else {
          // console.log('没有交集，合格')
          flag1 = true
        }
      }
    } else {
      //不存在区间，不需要判断
      flag1 = true
    }
    if (singleArr.length > 0) {
      for (const number of singleArr) {
        if (number >= arr1[0] && number <= arr1[1]) {
          // console.log('已存在的端口在新区间内，不合格')
          flag2 = false
          break;
        } else {
          // console.log('已存在的端口不在新区见内，合格')
          flag2 = true
        }
      }
    } else {
      //不存在端口，不需要判断
      flag2 = true
    }
    // console.log('是否合格：', flag1 && flag2)
    return flag1&&flag2
  } else {//输入的是端口号
     if (rangeArr.length > 0) {
      for (const arr2 of rangeArr) {
        if (value>=arr2[0]&&value<=arr2[1]) {
          // console.log('端口在已存在的区间内，不合格');
          flag1 = false
          break;
        }else {
          // console.log('端口不在已存在的区间内,合格');
          flag1 = true
        }
      }
    } else {
      //不存在区间，不需要判断
      flag1 = true
    }
    if (singleArr.includes(value)) {
      // console.log('端口号已存在,不合格');
      flag2 = false
    } else {
      // console.log('端口号不存在,合格');
      flag2 = true
    }
    // console.log('是否合格：', flag1 && flag2)
    return flag1&&flag2
  }
}
  
console.log(interJudge(3));// true
console.log(interJudge([2,6])); // false